package RapiWeb.Objeto;

public class CampoBD {

    private String str_NomCampo;
    private String str_Tipo;
    private String str_TipoVB;
    private String str_Tamaño;
    private String str_Nulo;
    private String str_Ordenar;

    public CampoBD() {
    }

    /**
     * Obtener Nombre del campo
     *
     * @return str_NomCampo
     */
    public String getStr_NomCampo() {
        return str_NomCampo;
    }

    /**
     * Asignar nombre al campo
     *
     * @param str_NomCampo
     */
    public void setStr_NomCampo(String str_NomCampo) {
        this.str_NomCampo = str_NomCampo;
    }

    /**
     * Obtener tipo de dato sql
     *
     * @return str_Tipo
     */
    public String getStr_Tipo() {
        return str_Tipo;
    }

    /**
     * Asignar tipo de datos sql y vb
     *
     * @param str_tipo
     */
    public void setStr_Tipo(String str_tipo) {
        this.str_Tipo = str_tipo;
        this.str_TipoVB = m_ConvertirVB(str_tipo);
    }

    /**
     * Obtener tamaño del campo
     *
     * @return str_Tamaño
     */
    public String getStr_Tamaño() {
        return str_Tamaño;
    }

    /**
     * Asignar tamaño al campo
     *
     * @param str_Tamaño
     */
    public void setStr_Tamaño(String str_Tamaño) {
        this.str_Tamaño = str_Tamaño;
    }

    /**
     * Obtener valor nulo del campo
     *
     * @return SI o NO
     */
    public String getStr_Nulo() {
        return str_Nulo;
    }

    /**
     * Asignar si acepta valor nulo el campo
     *
     * @param str_Nulo SI o NO
     */
    public void setStr_Nulo(String str_Nulo) {
        this.str_Nulo = str_Nulo;
    }

    public String getStr_Ordenar() {
        return str_Ordenar;
    }

    public void setStr_Ordenar(String str_Ordenar) {
        this.str_Ordenar = str_Ordenar;
    }

    /**
     * Obtener tipo de dato para VB
     *
     * @return str_TipoVB
     */
    public String getStr_TipoVB() {
        return str_TipoVB;
    }

    /**
     * Metodo para convertir un tipo de dato a otro lenguaje
     * @param str_Tipo tipo de dato a convertir
     * @return str_Valor nuevo tipo de dato
     */
    private String m_ConvertirVB(String str_Tipo) {
        String str_Valor = "";
        str_Tipo = str_Tipo.toUpperCase();
        if (str_Tipo.equals("INT")) {
            str_Valor = "int";
        } else if (str_Tipo.equals("NVARCHAR") || str_Tipo.equals("VARCHAR")
                || str_Tipo.equals("NVARCHAR2") || str_Tipo.equals("VARCHAR2")
                || str_Tipo.equals("CLOB") || str_Tipo.equals("TEXT")) {
            str_Valor = "String";
        } else if (str_Tipo.equals("FLOAT") || str_Tipo.equals("NUMERIC")) {
            str_Valor = "Double";
        } else if (str_Tipo.equals("NUMBER")) {
            int tamaño;
            String str_Tam = this.str_Tamaño;
            int indice = str_Tamaño.indexOf(",");
            if (indice > 0) {
                str_Tam = "";
                for (int i = 0; i < indice; i++) {
                    str_Tam += str_Tamaño.charAt(i);
                }
                str_Valor = "Double";
            } else {
                tamaño = Integer.parseInt(str_Tam);
                if (tamaño > 9) {
                    str_Valor = "Long";
                } else {
                    str_Valor = "Integer";
                }
            }
        } else if (str_Tipo.equals("SMALLDATETIME") || str_Tipo.equals("DATETIME")) {
            str_Valor = "DateTime";
        } else if (str_Tipo.equals("TIMESTAMP")) {
            str_Valor = "String";
        } else if (str_Tipo.equals("DATE")) {
            str_Valor = "String";
        } else if (str_Tipo.equals("BIT")) {
            str_Valor = "Boolean";
        } else if (str_Tipo.equals("CHAR")) {
            str_Valor = "Char";
        }
        return str_Valor;
    }
}
